package ar.unrn.tp1.application;

import java.util.List;

import org.joda.time.DateTime;
import org.springframework.transaction.annotation.Transactional;

import ar.unrn.tp1.model.Articulo;
import ar.unrn.tp1.model.Autor;
import ar.unrn.tp1.model.Hemeroteca;
import ar.unrn.tp1.model.Revista;

public class HemerotecaApplication implements IHemeroteca {

	private Hemeroteca hemeroteca;
	
	public HemerotecaApplication(Hemeroteca hemeroteca) {
		this.hemeroteca = hemeroteca;
	}
		
	@Transactional(readOnly = true)
	public int cantidadDeArticulos(String tituloOParteDelTitulo) {
		DateTime edicion = new DateTime(2014, 1, 1, 00, 0, 0, 0);
		Revista revista012014 = hemeroteca.recuperarRevista(edicion);
		if (revista012014 != null) {
			return revista012014.cantidadDeArticulosCuyoTituloContiene(tituloOParteDelTitulo);
		}
		return 0;
	}

	@Transactional(readOnly = true)
	public int cantidadDeArticulosPorAutor(String nombreAutor) {
		DateTime edicion = new DateTime(2014, 1, 1, 00, 0, 0, 0);
		Revista revista012014 = hemeroteca.recuperarRevista(edicion);
		if (revista012014 != null) {
			return revista012014.cantidadDeArticulosPorAutor(nombreAutor);
		}
		return 0;
	}


	@Override
	public List<Articulo> articulosPorRevista(DateTime edicion) {
		return hemeroteca.articulosPorRevista(new DateTime(2011, 3, 1, 00, 0, 0, 0));
	}


	@Override
	public List<Autor> autoresPorArticulo(String nombreArticulo) {
		return hemeroteca.autoresPorArticulo(nombreArticulo);
	}


	@Override
	public List<Articulo> articulosPorTema(String tema) {
		return hemeroteca.articulosPorTema(tema);
	}


	@Override
	public Revista revistaMasViejaPorTema(String tema) {
		return hemeroteca.revistaMasViejaPorTema(tema);
	}


	@Override
	public List<Object[]> revistasConMasDe2Articulos() {
		return hemeroteca.revistasConMasDe2Articulos();
	}


	@Override
	public Revista recuperarRevista(DateTime edicion) {
		return hemeroteca.recuperarRevista(edicion);
	}
	
	@Override
	public void nuevaRevista(Revista revista) {
		hemeroteca.nuevaRevista(revista);
	}

}
